home *** CD-ROM | disk | FTP | other *** search
/ Amoszine 11 / Amoszine 11 (Disk 2 of 2).adf / Ben_Wyatt_Source.lha / Plasma.AMOS / Plasma.amosSourceCode
AMOS Source Code  |  2004-04-12  |  3KB  |  93 lines

  1. ' Plasma 
  2. ' ~~~~~~ 
  3. ' by Ben Wyatt, bwyatt@paston.co.uk
  4.  
  5. ' Creates highy attractive random plasma patterns :) 
  6. ' Uses very long variable names for no reason :-\
  7.  
  8. Degree 
  9. Randomize Timer
  10.  
  11. Screen Open 0,320,256,16,Lowres
  12. Screen Display 0,128,37,320,256
  13. Flash Off : Curs Off : Cls 0
  14.  
  15. _PLASMA[Rnd(9)+1,32,256,Rnd(32),Rnd(32),1]
  16. Screen 0 : Get Palette(1)
  17. _COPYACROSS[0,0,320,256,32,256,1,0]
  18. Screen Close 1
  19. Screen 0
  20.  
  21. ' Create some nice fading effects
  22. Repeat 
  23.    SPD=1+Rnd(7)
  24.    Gosub 0+Rnd(5)
  25.    CN=0
  26.    Repeat 
  27.       MK=Mouse Key
  28.       Inc CN
  29.       Wait Vbl 
  30.    Until MK or CN>SPD*16
  31. Until MK
  32.  
  33. Direct 
  34.  
  35. 0 Fade SPD,$0,$10,$20,$30,$40,$50,$60,$70,$80,$90,$A0,$B0,$C0,$D0,$E0,$F0 : Return 
  36. 1 Fade SPD,$0,$1,$2,$3,$4,$5,$6,$7,$8,$9,$A,$B,$C,$D,$E,$F : Return 
  37. 2 Fade SPD,$F,$1F,$2F,$3F,$4F,$5F,$6F,$7F,$8F,$9F,$AF,$BF,$CF,$DF,$EF,$FF : Return 
  38. 3 Fade SPD,$0,$100,$200,$300,$400,$500,$600,$700,$800,$900,$A00,$B00,$C00,$D00,$E00,$F00 : Return 
  39. 4 Fade SPD,$F,$10F,$20F,$30F,$40F,$50F,$60F,$70F,$80F,$90F,$A0F,$B0F,$C0F,$D0F,$E0F,$F0F : Return 
  40. 5 Fade SPD,$F0,$1F0,$2F0,$3F0,$4F0,$5F0,$6F0,$7F0,$8F0,$9F0,$AF0,$BF0,$CF0,$DF0,$EF0,$FF0 : Return 
  41.  
  42. Procedure _PLASMA[WIDTHOFBARS,PATTERNWIDTH,PATTERNHEIGHT,XSIZE,YSIZE,SPSCREEN]
  43.    
  44.    ' Draws a plasma, the parameters:
  45.    '   WIDTHOFBARS - the width of each of the bars  
  46.    '  PATTERNWIDTH - width of the pattern 
  47.    ' PATTERNHEIGHT - height of the pattern
  48.    '         XSIZE - amount it wobbles it across (in pixels)
  49.    '         YSIZE - amount it wobbles it down   (in pixels)
  50.    '      SPSCREEN - the number of an undefined screen (spare)
  51.    
  52.    Screen Open SPSCREEN,PATTERNWIDTH*4,PATTERNHEIGHT+PATTERNWIDTH*2,16,Lowres
  53.    Screen Display SPSCREEN,152,37,PATTERNWIDTH,PATTERNHEIGHT
  54.    Flash Off : Curs Off : Cls 0
  55.    Palette $0,$10,$20,$30,$40,$50,$60,$70,$80,$90,$A0,$B0,$C0,$D0,$E0,$F0
  56.    ' You might prefer to have a screen hide here... 
  57.    Screen Offset SPSCREEN,PATTERNWIDTH,PATTERNWIDTH
  58.    
  59.    I=0 : D=1
  60.    For Y=0 To PATTERNHEIGHT+PATTERNWIDTH*2 Step WIDTHOFBARS
  61.       Add I,D
  62.       If I=15 : D=-1 : End If 
  63.       If I=0 : D=1 : End If 
  64.       Cls I,0,YP To 320,Y
  65.       YP=Y
  66.    Next Y
  67.    
  68.    ' Wobble it across 
  69.    For X=1 To 319
  70.       Screen Copy SPSCREEN,0,0,1,PATTERNHEIGHT+PATTERNWIDTH*2 To SPSCREEN,X,Cos((X*360)/PATTERNWIDTH)*XSIZE
  71.    Next X
  72.    
  73.    ' Wobble it down :)
  74.    For Y=0 To PATTERNHEIGHT+PATTERNWIDTH*2-1
  75.       Screen Copy SPSCREEN,0,Y+1,319,Y+2 To SPSCREEN,Sin((Y*360)/PATTERNHEIGHT)*YSIZE,Y
  76.    Next Y
  77.    
  78. End Proc
  79.  
  80. Procedure _COPYACROSS[X1,Y1,X2,Y2,PATTERNWIDTH,PATTERNHEIGHT,SPSCREEN,DESTSCREEN]
  81.  
  82.    ' Copy the plasma across the screen, parameters: 
  83.    '   X1,Y1,X2,Y2 - area to be filled with the plasma  
  84.    '  PATTERNWIDTH - the width of the pattern 
  85.    ' PATTERNHEIGHT - the height of the pattern
  86.    '      SPSCREEN - screen number of the plasma  
  87.    '    DESTSCREEN - destination screen for the plasma to be copied to  
  88.  
  89.    For X=X1 To X2 Step PATTERNWIDTH
  90.       Screen Copy SPSCREEN,PATTERNWIDTH,PATTERNWIDTH,2*PATTERNWIDTH,PATTERNWIDTH+Y2-Y1 To DESTSCREEN,X,Y1
  91.    Next X
  92.  
  93. End Proc